/**
 * Календарь гагесов
 */

$(document).ready(function(){
});

/**
 * Переменная для хранения ... даты
 */
var curDate = '';

/**
 * Переменная для хранения ... даты
 */
var curNavDate = '';




/**
 * Инициализация дат
 */
if ( typeof curDate == 'undefined' || curDate == '' ){
	curDate = new Date();
	var gage_calendar_date = getCookie('gage_calendar_date');
	if ( gage_calendar_date ){
		curDate.setTime(gage_calendar_date);
	}
	curNavDate = new Date(curDate);
}




/**
 * Ссылка на скрипт обработчик ajax-запросов
 */
function gageCalendarGetScript(msg){
	return '/common/get_cd_new.php';
}


/**
 * Вывод информационного сообщения
 */
function gageCalendarAlert(msg){
	alert(msg);
}


/**
 * Сохранение текущей даты
 */
function saveCurDate(){
	//setCookie('gage_calendar_date', curDate.getTime());
}


/**
 * Упаковка даты
 */
function serializeDate(date){
	return (date.getDate() > 9 ? '' : '0') + date.getDate().toString()
		+ (date.getMonth() > 8 ? '' : '0') + (date.getMonth()+1).toString()
		+ date.getFullYear();
}


/**
 * Загрузка событий календаря. Все параметры передаются в params-объекте
 */
function loadCalendarEvents(params, on_load){
	var q_arr = [];
	for ( var k in params ){
		q_arr.push(k + "=" + params[k]);
	}
	
	var q_str = gageCalendarGetScript() + '?' + q_arr.join("&");
	$.ajax({
		type: "GET",
		url: q_str,
		async: false,
		success: function(data){
			data=eval("("+data+")");
			if (typeof on_load == 'function') on_load(data);
		}
	});
	//$.getJSON(q_str, on_load);
}


/**
 * Загрузка событий двух команд для календаря приглашений 
 */
function loadBothCalendarEvents(histeam_id, date, on_load){
	var result = [];

	// Наши события
	var q_str = gageCalendarGetScript() + '?' + 'type=myevent&date=' + date;

	// Делаем синхронный запрос
	eval("result.my = " +	
		$.ajax({
			type: "GET",
			url: q_str,
			async: false
		}).responseText
		+ ";"
	);

	// Чужие события
	q_str = gageCalendarGetScript() + '?' + 'type=hisevent&team_id=' + histeam_id + '&date=' + date;
	eval("result.his = " + 
		$.ajax({
			type: "GET",
			url: q_str,
			async: false
		}).responseText
		+ ";"
	);

	result.team_id = histeam_id;

	if (typeof on_load == 'function') on_load(result);
}


/**
 * HTML-кусок для календаря
 */
function getCalendarHtml(settings, data, is_my){
	if (typeof settings == 'undefined') settings = {};
	if (typeof data == 'undefined') data = {};

	var wdays  = (typeof settings.wdays  != 'undefined') ? settings.wdays  : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
	var months = (typeof settings.months != 'undefined') ? settings.months : ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
	var weekstart = (typeof settings.weekstart != 'undefined') ? settings.weekstart : 1;
	var onClickDay = (typeof settings.onClickDay != 'undefined') ? settings.onClickDay : "";

	var dt_today = new Date();
	var dt_current = new Date(curNavDate);
	var dt_selected = new Date(curDate);
	var dt_from = new Date(dt_current);
	dt_from.setDate(1);
	dt_from.setDate(1 - (7 + dt_from.getDay() - weekstart) % 7);

	var calendarHtml = '<table class="table"><tr>';
	for (var i = 0; i < 7; i++){
		calendarHtml += '<td>' + wdays[(i + weekstart)%7] + '</td>'
	}
	calendarHtml += '</tr>';

	var cur = new Date(dt_from);
	while (cur.getMonth() == dt_from.getMonth() || cur.getMonth() == dt_current.getMonth())
	{
		calendarHtml += '<tr>';
		for (var j = 0; j < 7; j++){
			var val = serializeDate(cur);
			var dkey = "d" + val;
			var is_active = (cur.getMonth() == dt_current.getMonth());  // День является днем текущего месяца
			var is_past   = (data.past.indexOf(dkey) >= 0 ? true : false);
			var is_today  = (cur.getMonth() == dt_today.getMonth() && cur.getDate() == dt_today.getDate() && cur.getFullYear() == dt_today.getFullYear());
			var is_selected  = (cur.getMonth() == dt_selected.getMonth() && cur.getDate() == dt_selected.getDate() && cur.getFullYear() == dt_selected.getFullYear());
			var ad_class = "";
			
			if (is_my)
			{
				if (typeof data.inv[dkey] != 'undefined')
				{
					// Есть активные приглашения в этот день
					ad_class = ' cday_event_active';
				}
				else if (typeof data.gages[dkey] != 'undefined')
				{
					// Есть гагес на этот день
					ad_class = data.gages[dkey].free ? ' cday_event_passive' : ' cday_gage' + (is_past ? '_past' : '');
				}
				else if (typeof data.myinv[dkey] != 'undefined')
				{
					// Есть наши приглашения в этот день
					ad_class = ' cday_event_passive';
				}
			}
			else if (typeof data.gages[dkey] != 'undefined')
			{
				ad_class = data.gages[dkey].free ? ' cday_event_passive' : ' cday_gage' + (is_past ? '_past' : '');
			}

			calendarHtml += '<td class="cday' + (is_active ? ' cday_active' : '') + (is_today ? ' cday_today' : '') + (is_past ? ' cday_past' : '') + (is_selected && is_active ? ' cday_selected' : '') + ad_class + ' cday_' + val + '"'
				+ ((onClickDay && is_active && !is_past) ? ' onclick="' + onClickDay + '(\'' + val + '\');"' : '') + '>' + cur.getDate() + '</td>';

			cur.setDate(cur.getDate() + 1);
		}

		calendarHtml += '</tr>';
	}

	calendarHtml += '</table>';
	return {"html": calendarHtml, "month": months[dt_current.getMonth()], "year": dt_current.getFullYear() };
}








function gageCalendarDrawEventCalendar(data, isMy, isCap)
{
	eventCalendarData = data;
	var settings = {
		"wdays": [
			Dictionary.translate('lang_weekday_u0short'),
			Dictionary.translate('lang_weekday_u1short'),
			Dictionary.translate('lang_weekday_u2short'),
			Dictionary.translate('lang_weekday_u3short'),
			Dictionary.translate('lang_weekday_u4short'),
			Dictionary.translate('lang_weekday_u5short'),
			Dictionary.translate('lang_weekday_u6short'),
		],
		"months": [
			Dictionary.translate('lang_month_u1short'),
			Dictionary.translate('lang_month_u2short'),
			Dictionary.translate('lang_month_u3short'),
			Dictionary.translate('lang_month_u4short'),
			Dictionary.translate('lang_month_u5short'),
			Dictionary.translate('lang_month_u6short'),
			Dictionary.translate('lang_month_u7short'),
			Dictionary.translate('lang_month_u8short'),
			Dictionary.translate('lang_month_u9short'),
			Dictionary.translate('lang_month_u10short'),
			Dictionary.translate('lang_month_u10short'),
			Dictionary.translate('lang_month_u12short')
		],
		"weekstart": 1,
		"onClickDay": "onClickEventCalendarDay"
	};

	var cal = getCalendarHtml(settings, data, isMy);

	$("div.container__eventCalendar").html(cal.html);
	$("span.container__curECMonth").html(cal.month);
	$("span.container__curECYear").html(cal.year);

	if ( !eventCalendarInitiated )
	{
		var cur = serializeDate(curDate);
		onClickEventCalendarDay(cur);
		eventCalendarInitiated = true;
	}
}

function gageCalendarOnClickEventCalendarDay(day, isMy, isCap, area)
{
	var date = day.match(/^(\d\d)(\d\d)(\d\d\d\d)$/);
	var k = "d" + day;
	$("input.hidden__curDate").val(day); // ставим значение даты в поля форм
	$("input#hidden__curDateRead"+area).val(date[1]+'.'+date[2]+'.'+date[3]); // ставим значение даты в read-поле формы

	curDate.setFullYear(date[3], (date[2] - 1), date[1]);
	saveCurDate();
	if ( isMy ){
		// Прячем все
		$("#container__invitationsFromTeams").hide();
		$("#container__invitationsToTeams").hide();
		$("#container__createGageNotice").hide();
		$("#container__createGageNoticeHide").hide();
		$("#container__gageForm").hide();
		$("#container__gageInfo").hide();

		if (eventCalendarData.past.indexOf(k) >= 0)
		{
			// День в прошлом
			if (typeof eventCalendarData.gages[k] != 'undefined')
				genGageInfo(eventCalendarData.gages[k], true);
		}
		else
		{
			// День в настоящем/будущем
			if (typeof eventCalendarData.inv[k] != 'undefined')
				genInvitations(eventCalendarData.inv[k]);

			if (typeof eventCalendarData.myinv[k] != 'undefined')
				genMyInvitations(eventCalendarData.myinv[k]);

			if (typeof eventCalendarData.gages[k] != 'undefined')
			{
				if ( isCap ){
					if (eventCalendarData.gages[k].free){
						// Гагес свободный
						genGageForm(eventCalendarData.gages[k]);
					}else{
						// Гагес утвержденный
						genGageInfo(eventCalendarData.gages[k], false);
					}
				}else{
					genGageInfo(eventCalendarData.gages[k], false);
				}
			}
			else if ( isCap ){
				genGageForm(false);      
			}
		}
	}else{
		$("#container__opponentDayComment").html( 
			genOpponentDayComment((typeof eventCalendarData.gages[k] != 'undefined' ? eventCalendarData.gages[k] : false), (eventCalendarData.past.indexOf(k) >= 0)) 
		);
	}
	$("div.container__eventCalendar td.cday").removeClass('cday_selected');
	$("div.container__eventCalendar td.cday_" + day).addClass('cday_selected');
}

function gageCalendarSwitchMonth(mode){
	var month = curNavDate.getMonth();
	if ( mode == 'prev' )
		month = month - 1;
	if ( mode == 'next' )
		month = month + 1;

	curNavDate.setMonth(month);
	calendarLoadParam.date = serializeDate(curNavDate);
	loadCalendarEvents(calendarLoadParam, drawEventCalendar);
}

function gageCalendarWait(mode){
	if ( mode == 'begin' ){
		$("div.hide_on_wait").hide();
		$("div.show_on_wait").show();
	}
	if ( mode == 'stop' ){
		$("div.show_on_wait").hide();
		$("div.hide_on_wait").show();
	}
}
